package br.com.ava.core.produto;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import br.com.ava.core.editora.Editora;
import br.com.ava.core.infra.persistencia.ObjetoPersistente;

@Entity
@Table(name = "produto")
@SequenceGenerator(name = "idproduto_seq", sequenceName = "idproduto_seq", allocationSize = 1)
@SuppressWarnings("serial")
public class Produto extends ObjetoPersistente {

	private String nome;
	private float valorvenda;
	private int ano;
	private String isbn;
	private int npaginas;
	private int edicao;
	private int quantestoque;
	private String autores;
	private Editora editora;

	public Produto(String nome, float valorvenda, int ano, String isbn,
			int npaginas, int edicao, int quantestoque, String autores,
			Editora editora) {
		super();
		this.nome = nome;
		this.valorvenda = valorvenda;
		this.ano = ano;
		this.isbn = isbn;
		this.npaginas = npaginas;
		this.edicao = edicao;
		this.quantestoque = quantestoque;
		this.autores = autores;
		this.editora = editora;
	}

	public Produto() {

	}

	/** {@inheritDoc} */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "idproduto_seq")
	@Column(name = "idproduto", nullable = false)
	@Override
	public Integer getId() {
		return id;
	}

	@NotNull
	@Size(max = 255)
	@Column(name = "titulo", nullable = false)
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@NotNull
	@Column(name = "valor_venda", nullable = false)
	public float getValorvenda() {
		return valorvenda;
	}

	public void setValorvenda(float valorvenda) {
		this.valorvenda = valorvenda;
	}

	@NotNull
	@Column(name = "ano", nullable = false)
	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	@NotNull
	@Size(max = 45)
	@Column(name = "isbn", nullable = false)
	public String getIsbn() {
		return isbn;
	}

	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}

	@NotNull
	@Column(name = "n_paginas", nullable = false)
	public int getNpaginas() {
		return npaginas;
	}

	public void setNpaginas(int npaginas) {
		this.npaginas = npaginas;
	}

	@NotNull
	@Column(name = "edicao", nullable = false)
	public int getEdicao() {
		return edicao;
	}

	public void setEdicao(int edicao) {
		this.edicao = edicao;
	}

	@NotNull
	@Column(name = "quant_estoque", nullable = false)
	public int getQuantestoque() {
		return quantestoque;
	}

	public void setQuantestoque(int quantestoque) {
		this.quantestoque = quantestoque;
	}

	@NotNull
	@Size(max = 255)
	@Column(name = "autores", nullable = false)
	public String getAutores() {
		return autores;
	}

	public void setAutores(String autores) {
		this.autores = autores;
	}

	@NotNull
	@ManyToOne(targetEntity = Editora.class)
	@JoinColumn(name = "ideditora", nullable = false, referencedColumnName = "ideditora")
	public Editora getEditora() {
		return editora;
	}

	public void setEditora(Editora editora) {
		this.editora = editora;
	}

}
